//----------------------------------*-C++-*----------------------------------//
/*!
 * \file   QuadratureFactory.hh
 * \author Jeremy Roberts
 * \date   06/21/2011
 * \brief  QuadratureFactor class definition.
 * \note   Copyright (C) 2011 Jeremy Roberts.  Adapted from Denovo.
 */
//---------------------------------------------------------------------------//
// $Rev:: 120                                           $:Rev of last commit
// $Author:: j.alyn.roberts@gmail.com                   $:Author of last commit
// $Date:: 2011-07-14 13:55:43 +0000 (Thu, 14 Jul 2011) $:Date of last commit
//---------------------------------------------------------------------------//

#ifndef QUADRATUREFACTORY_HH
#define QUADRATUREFACTORY_HH

#include "angle/Definitions.hh"
#include "angle/Quadrature.hh"
#include "tran/Traits.hh"
#include "../utilities/SP.hh"


namespace slabtran
{

//===========================================================================//
/*!
 * \class QuadratureFactory
 * \brief Used to build slabtran::Quadrature objects.
 *
 * The currently implemented quadrature choices are:
 * - LEVELSYM   : 3D/2D Level Symmetric
 * - UNIEQUAL   : 3D/2D Uniform Equal Weight
 * - QUADRUPLE  : 2D Symmetric Quadruple Range
 * - GAUSSLEG   : 1D Gauss-Legendre
 * .
 * Any other choice will result in a runtime assertion.
 *
 * \sa slabtran::Quadrature, slabtran::Level_Symmetric_3D,
 *     slabtran::Uniform_Equal_3D, slabtran::Quadruple_Range_2D,
 *     slabtran::Gauss_Legendre_1D
 */
//===========================================================================//

template <class D>
class QuadratureFactory 
{
  public:
    //! Quadrature type.
    typedef util::SP<Quadrature<D> > SP_Quadrature;
    
  public:
    // Constructor.
    QuadratureFactory();

    // Build a quadrature set.
    SP_Quadrature build(int quad_type, int sn_order = 4, double norm = 0.0);
};

} // end namespace slabtran

#endif // aQUADRATUREFACTORY_HH

//---------------------------------------------------------------------------//
//              end of QuadratureFactory.hh
//---------------------------------------------------------------------------//
